package org.example.mapper;

import org.apache.ibatis.annotations.Select;
import org.example.entity.user;

import java.util.List;

public interface UserMapper {
    // 根据 ID 查询用户
//    注解方式，直接写在接口上，这种方式的优点是，对于需求比较简单的系统，效率较高。缺点是，当SQL有变化时都需要重新编译代码。
//  注解方式可以替代简单的 XML 文件，但在复杂场景下仍需要 XML。用了注解就可以不用写usermapper.xml
//    可以不用在usermapper.xml里进行写，省略掉了一些步骤，只要写中间的sql语句
    @Select({"SELECT * FROM result WHERE id = #{id}"})
    List<user> selectUserById(int id);
    List<user> selectUser();
    // 插入用户
    int insertUser(String name,String charst);
//    @Insert({ "insert into user(userName, passWord) values(#{userName}, #{passWord})" })
//    @Options(useGeneratedKeys = true, keyProperty = "id")
    //这个是返回非自增主键的用法，直接查询最后一行，指定返回的类型
// @SelectKey(statement = "SELECT LAST_INSERT_ID()", keyProperty = "userId",resultType= Integer.class,before =flase)
//是 MyBatis 框架中用于注解映射器（Mapper）接口方法的一个注解，主要用于配置插入（INSERT）操作时自动生成主键的相关选项
//    int insertUser(User user);
    //也就是返回改变的是哪一行
    //    useGeneratedKeys = true：
    //    表示启用生成主键的功能。
    //    当插入一条记录到数据库时，如果数据库表的主键是自增的（例如 MySQL 的 AUTO_INCREMENT），MyBatis 可以自动获取数据库生成的主键值，并将其设置到传递的对象中。
    //    keyProperty = "id"：
    //    指定将数据库生成的主键值设置到对象的哪个属性上。
    //    这里的 "id" 是对象中主键对应的属性名，表示生成的主键值会设置到对象的 id 属性中。
    // 更新用户
    int updateUser(String name,String charst,int id);

    // 删除用户
    int deleteUser(int id);
    int deleteUser1(String name);
}